使用 JMS 的 Java 下载自动更新 Oracle JDK
Praveen Srivastava 于 2024 年 5 月 8 日要使 Java 保持最新状态,需要使用最新的 Java 功能版本或 Java 修补程序版本,这些版本可用于构建工具、CI/CD 管道、Docker 镜像、容器或应用程序。Java 的自动配置需要根据策略、规则和规范选择正确的版本,无需人工干预。例如,Maven 和 Gradle 等构建工具配置为自动检测本地文件系统中的 Java 运行时,但没有自动更新 Oracle JDK 的功能(如果它不是最新的)。另一个例子是 Dockerfile,它包含用于组装容器镜像的指令的文本文件。通常,Dockerfile 包含特定版本的 URL,为了使用最新版本保持更新,需要在每次新版本发布后手动更新该文件。
根据 无费用条款和条件 (NFTC) 提供的最新 Oracle JDK 版本更新的下载可以通过 Java 下载页面上的脚本友好型下载 URL 自动化,只要它们是在这些条款下提供的,但较早版本(如 Java 8 和 11)的更新下载(从 2024 年 10 月开始,Java 17)根据 Oracle 技术网络 (OTN) 许可 条款提供,无法从 oracle.com/javadownload 轻松自动化,因为访问这些版本需要用户使用 Oracle 帐户登录并每次都接受许可条款。
为了允许自动下载较旧 Oracle JDK 版本的更新,Oracle 于 2023 年 11 月通过 Oracle 云基础设施 (OCI) 上的 Java 管理服务 (JMS) 推出了 Java 下载服务。此功能旨在满足 Java 开发人员、管理员和软件提供商的需求。JMS 的 Java 下载通过允许对所有受支持的 JDK 版本(包括根据 Oracle 技术网络 (OTN) 许可证需要许可证接受的版本)进行脚本友好的下载,提供了更多选择。JMS 及其脚本友好型下载功能,使用基于令牌的身份验证,方便在您的自动化构建和部署系统中无缝使用最新的 Java 版本。
用于身份验证和许可证接受的令牌
身份验证令牌通过消除每次交互都需要登录的需要,简化了用户对云服务的访问。在 JMS Java 下载的背景下,令牌在促进脚本和 Dockerfile 中所有 Java 版本的自动下载方面发挥着至关重要的作用。这些令牌由 JMS 管理员在接受适用的许可条款后创建,允许使用脚本友好的下载命令。下载请求需经 JMS Java 下载服务器验证关联的令牌。
Java 下载允许管理员为每个 Java 版本生成唯一的令牌。每个令牌的有效期可自定义,可以是数年。生成的令牌可以分发给组织内的所有用户,即使是那些没有 OCI 帐户的用户,也可以在将下载最新版本的 JDK 的应用程序和脚本中使用。
令牌生成和下载流程在下面的功能工作流程中进行了描述。
JMS Java 下载为 JMS 管理员提供了一个令牌管理界面,用于在 JMS 控制台中创建、撤销和更新令牌,可以通过 OCI 帐户访问。如果您不熟悉 OCI,可以创建一个 Oracle 云免费层 帐户,该帐户允许永久访问 JMS,并包括对所有 OCI 服务的有限时试用。试用期包括 300 美元的云积分,有效期最长 30 天。您可以将这些积分用于任何符合条件的 Oracle 云基础设施服务。JMS 免费使用(尽管如果您超过始终免费的存储限制,您可能会产生一些数据存储费用),因此您可以在试用期结束后继续使用您的 OCI 帐户管理和使用 JMS 下载令牌。
Oracle 云基础设施可从 24 个国家/地区的 48 个公共云区域 获得。JMS Java 下载服务允许您从任何区域创建令牌和下载 Java。这使开发人员和系统管理员可以选择最靠近下载 JDK 系统的位置,并符合数据本地化要求。
默认情况下,令牌在该 Oracle JDK 版本的更新根据当前条款提供时有效。这意味着根据无费用条款和条件提供的较新版本将为 LTS 版本提供长达 3 年,而根据 Java SE OTN 许可条款提供的版本将提供到支持生命周期结束 (EOSL) 日期。如果管理员首先接受新条款,则仅当管理员首先接受新条款时,才能延长达到许可证许可结束日期的 NTFC 版本的令牌,以继续访问根据新许可条款提供的较新更新。
下载报告
Java 下载有一个报告部分,允许查看使用每个令牌的所有 JDK 下载。下载报告根据各种标准(如 Java 版本、特定版本下的版本、操作系统、体系结构等)提供下载数量的细分。控制台提供深入挖掘功能,可以深入了解详细的下载信息,一直到单个下载的 JDK 二进制文件。报告也可以以 CSV 格式下载。
可脚本化下载的实际应用
JMS 的 Java 下载提供的可脚本化下载功能为参与 Java 发现和下载的工具、库、插件、CI/CD 管道和浏览器扩展打开了新的可能性。此功能使最新 Oracle JDK 版本的自动配置成为可能,解决了各种用例,其中一些用例概述如下。
在 Maven/Gradle 中自动下载/自动配置 Oracle JDK
Maven 和 Gradle 都支持根据工具链/构建配置文件自动检测 Java。自动检测需要手动下载 JDK 并将其存储在本地。Maven 和 Gradle 都不支持自动下载或自动配置 Oracle JDK。但是,Maven 和 Gradle 都具有支持 Oracle 的 OpenJDK 构建的自动下载/自动配置的外部插件。同样,JMS 中的可脚本化下载可用于支持 Oracle JDK 的自动下载。
始终最新的 Dockerfile
Dockerfile 包含创建容器镜像的指令。Java 下载提供启动/示例 Dockerfile,这些 Dockerfile 使用在创建镜像时可用的最新 Oracle JDK 更新构建容器镜像。这些镜像使用 Oracle Linux 8 作为基本层(因为它们是示例文件),可以修改为使用任何所需的版本。
JMS 提供两种类型的 Dockerfile
-
使用“当前版本”的 Dockerfile:建议大多数用户使用此方法,因为它将使用最新版本的 Java 创建镜像。这些文件将检索所选 Java 版本的最新版本。例如,想要 JDK 21 的用户将在 2024 年 4 月之前获得 21.0.2,然后在 2024 年 7 月之前获得 21.0.3,然后获得 21.0.4 等等……
-
来自存档版本的 Dockerfile:这些 Dockerfile 检索特定更新版本。当需要特定 JDK 版本时,这很有用。用户可以指定 21.0.2,即使在发布 21.0.3 之后,也会获得该确切版本。仅当需要过时的 Java 版本时,才建议使用这些 Dockerfile,例如调试旧版本上的问题。
在 CI/CD 管道中自动执行 JDK 下载
脚本友好的下载命令可以有效地用于 CI/CD 工具,以确保管道始终下载具有最新安全修复程序的最新 JDK 版本,无需人工干预。例如,典型的 CI 构建功能的 Dockerfile 可以包含以下命令来安装 Java 版本
RUN rpm -ivh https://dummy.domain.com/artifactory/jdk/17.0.8/bundles/linux-x64/jdk-17.0.8_linux-x64_bin.rpm
用户需要跟踪最新的 JDK 版本并手动更新版本号。可以使用 JMS 的可脚本化下载自动执行此过程,通过使用以下命令,无需手动跟踪 Oracle JDK 版本和更新 Dockerfile
RUN JAVA_PKG=https://javamanagementservice-download.us-ashburn-1.oci.oraclecloud.com/java/17/latest/jdk-17_linux-x64_bin.rpm;
\ curl -H "token:<your_token_here>" -L --output /tmp/jdk.rpm "$JAVA_PKG";
\ rpm -ivh /tmp/jdk.rpm;
其他资源
- Java 下载用户指南
- OCI 可观察性和管理,其中包含 Java 管理服务
- OCI 上的 Java 下载